package cn.t.keycloak.demo.mfa.sms.util;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * @author 陶敏麒
 * @date 2023/11/20 16:45
 */
@Slf4j
public class SmsCache {

    public static final int EXPIRE_SEC = 120;

    private static final Cache<String, String> caffeine = Caffeine.newBuilder()
            // 记录状态(统计) 使用Cache.stats() 返回一个 CacheStats
            .recordStats()
            // 在最后一次访问或者写入后的过期时间(一直访问则一直不过期)
            .expireAfterWrite(EXPIRE_SEC, TimeUnit.SECONDS)
            .initialCapacity(128)
            // 最大缓存数量
            .maximumSize(2048).build();



    /**
     * 存放验证码缓存
     */
    public static void putCode(String realm, String phoneNumber, String code) {
        log.info(">>>>缓存手机[{}],领域[{}]的验证码[{}]", phoneNumber, realm, code);
        caffeine.put(realm + ":" + phoneNumber, code);
    }

    public static String getCode(String realm, String phoneNumber) {
        return caffeine.getIfPresent(realm + ":" + phoneNumber);
    }

    public static void cleanCode(String realm, String phoneNumber) {
        caffeine.invalidate(realm + ":" + phoneNumber);
    }
}
